/**
 * describe:
 *
 * @author chaP
 * @date 2019/02/26
 */
package CodingTest.AC20190226;

import java.util.HashMap;
import java.util.Map;

/**
 * 题目描述：你正在和你的朋友玩 猜数字（Bulls and Cows）游戏：你写下一个数字让你的朋友猜。每次他猜测后，你给他一个提示，告诉他有多少位数字和确切位置都猜对了（称为“Bulls”, 公牛），有多少位数字猜对了但是位置不对（称为“Cows”, 奶牛）。你的朋友将会根据提示继续猜，直到猜出秘密数字。

 请写出一个根据秘密数字和朋友的猜测数返回提示的函数，用 A 表示公牛，用 B 表示奶牛。

 请注意秘密数字和朋友的猜测数都可能含有重复数字。

 示例 1:

 输入: secret = "1807", guess = "7810"

 输出: "1A3B"

 解释: 1 公牛和 3 奶牛。公牛是 8，奶牛是 0, 1 和 7。
 示例 2:

 输入: secret = "1123", guess = "0111"

 输出: "1A1B"

 解释: 朋友猜测数中的第一个 1 是公牛，第二个或第三个 1 可被视为奶牛。
 */

public class getHint {
    public String getHint(String secret,String guess){
        Map<Character,Integer> map = new HashMap<>();
        StringBuffer newguess = new StringBuffer();
        int Bulls = 0;
        int Cows = 0;
        for(int i = 0;i<secret.length();i++){
            if(secret.charAt(i) == guess.charAt(i)){
                Bulls ++;
            }else{
                if(map.containsKey(secret.charAt(i))){
                    map.put(secret.charAt(i),map.get(secret.charAt(i))+1);
                }else{
                    map.put(secret.charAt(i),1);
                }
                newguess.append(guess.charAt(i));
            }
        }
//        找Crows的数量
        String guess2 = newguess.toString();
        for(int j = 0;j<guess2.length();j++){
            if(map.containsKey(guess2.charAt(j))){
                if(map.get(guess2.charAt(j)) == 1){
                    map.remove(guess2.charAt(j));
                    Cows++;
                }else{
                    map.put(guess2.charAt(j),map.get(guess2.charAt(j))-1);
                    Cows++;
                }

            }
    }
    return Bulls + "A" + Cows + "B";
}

    public static void main(String[] args) {
        String secret = "1807";
        String guess = "7810";
        getHint gh = new getHint();
        System.out.println(gh.getHint(secret,guess));
    }
}
